package com.bestcem.xm.ticket.controller.param.ticket.template;


import com.bestcem.xm.ticket.constant.ColumnConstant;
import com.bestcem.xm.ticket.enums.TicketTemplateFieldUpdatedEnum;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 工单模板的请求参数封装
 *
 * @author xuan.yang <xuan.yang@idiaoyan.com>
 * @version v2.3
 * @date 2021/9/1 18:36
 */
@Data
public class TemplateParam {


    /**
     * name
     */
    private String name;
    /**
     * type
     * 模板类型1-详情，2-处理模板
     */
    private Integer type;

    /**
     * 是否置顶，默认模板需要置顶
     */
    private Integer seq = 1;

    /**
     * 是否被使用，
     * 1-被使用，2-未被使用
     */
    private Integer use;
    /**
     * 创建人
     */
    private String creator;

    @JsonProperty(value = ColumnConstant.TicketTemplateV2.FIELD_LIST)
    private List<FieldInfo> fieldList;

    @Data
    public static class FieldInfo implements Serializable {

        /**
         * name
         */
        private String name;
        /**
         * type
         * text--1单行文本； multiLine--2 多行文本；
         * select---3单选； cascadeSelect--4 级联选择
         */
        private Integer type;

        /**
         * field
         * 每个field的key
         */
        private String field;
        /**
         * value 单行或者多行的时候存在
         */
        private String value;
        /**
         * require
         * 默认false
         */
        private Boolean required = Boolean.FALSE;
        /**
         * singleSelectValue
         */
        @JsonProperty(value = ColumnConstant.TicketTemplateV2.FieldInfo.SINGLE_SELECT)
        private SingleSelect singleSelect;

        /**
         * CascadeValue
         */
        @JsonProperty(value = ColumnConstant.TicketTemplateV2.FieldInfo.CASCADE_LIST)
        private List<Cascade> cascadeList;

        /**
         * 是否允许修改该字段，默认1 {@link TicketTemplateFieldUpdatedEnum}
         */
        @JsonProperty(value = ColumnConstant.TicketTemplateV2.FieldInfo.IS_UPDATE)
        private Integer isUpdate = TicketTemplateFieldUpdatedEnum.TEMPLATE_IS_UPDATE.getIndex();
    }



    @Data
    public static class SingleSelect implements Serializable {

        /**
         * options
         * 当source为1的时候存在数值
         */
        @JsonProperty(value = ColumnConstant.TicketTemplateV2.SingleSelectValue.OPTION_LIST)
        private List<Option> optionList;
        /**
         * source
         * 1-自定义数据，2-系统问卷数据 3-系统联系人数据
         */
        private Integer source;
        /**
         * 选项名称
         */
        private String content;
        @Data
        @NoArgsConstructor
        @AllArgsConstructor
        public static class Option implements Serializable{

            private String field;
            private Integer value;
        }

    }


    @Data
    public static class Cascade implements Serializable {
        private static final long serialVersionUID = 2808726620840986656L;

       private Integer level;
       @JsonProperty(ColumnConstant.TicketTemplateV2.Cascade.OPTION_LIST)
       private List<Option> optionList;

    }



    @Data
    public static class Option implements Serializable {
        /**
         * id
         */
        private String id;
        /**
         * pid
         * 父id，存在多级关联
         * 父id的pid为0
         */
        private String pid;
        /**
         * value
         */
        private String value;

    }
}
